#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    //connect(this, &Widget::mySignal, this, &Widget::handleMySignal);

    //使用lambda表达式定义槽函数 不用再去Widget类内声明定义函数 更加方便 但需要注意捕捉的变量的生命周期
    QPushButton* button = new QPushButton(this);
    button->setText("执行lambda表达式");
    button->move(50, 50);
    //这里使用=而不是&捕捉 是因为捕捉的对象是指针 如果使用引用 离开构造函数作用域后 指针变量销毁 后续执行lambda表达式会内存访问错误
    connect(button, &QPushButton::clicked, this, [=]() {
        button->move(100, 100);
        this->move(100, 100);
    });
}

Widget::~Widget()
{
    delete ui;
}

//void Widget::handleMySignal()
//{
//    this->setWindowTitle("信号被处理");
//}

//只要使用过图形化界面的方式创建过控件 就算是自定义信号也可以通过这种命名方式自动连接信号槽 无需手动调用connect
void Widget::on_Widget_mySignal(const QString& text)
{
    this->setWindowTitle(text);
}

//通过图形化界面的方式创建控件时 setupUi时会调用connectSlotsByName 这时通过on_pushButton_clicked这种命名方式可以自动连接信号槽
void Widget::on_pushButton_clicked()
{
    emit mySignal("标题1");
}

void Widget::on_pushButton_2_clicked()
{
    emit mySignal("标题2");
}
